package org.soderiakelvy.controller.sujeto;

import java.util.List;

import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import javax.faces.context.FacesContext;

import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.controller.util.SelectOneMany;
import org.soderiakelvy.model.domain.FrioCalorVO;
import org.soderiakelvy.model.domain.PackVO;
import org.soderiakelvy.model.domain.ProductoVO;
import org.soderiakelvy.model.domain.RepartoVO;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.domain.TipoClienteVO;
import org.soderiakelvy.model.service.ProductoServicio;
import org.soderiakelvy.model.service.RepartoServicio;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.ProductoServicioImp;
import org.soderiakelvy.model.service.imp.RepartoServicioImp;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;
import org.soderiakelvy.model.util.ConstantModel;

@ManagedBean
@ViewScoped
public class SujetoResidencialList {

	private SujetoServicio servicio = new SujetoServicioImpl();
	private List<SucursalVO> listaSucursales = SelectOneMany.getSucursalesResidenciales();
	private SucursalVO sucursal = new SucursalVO();

	public SujetoResidencialList() {
		System.out.println("Constructor Sujeto Residencial List");
	}
	
	public String nuevoSujetoResidencial(){
		if (this.sujetoResidencialAltaValido()){
			return Constante.URL_RESIDENCIAL_ALTA_PASO_UNO ;	
		}else{
			return null;
		}
	}

	private boolean sujetoResidencialAltaValido(){
		SujetoServicio sujetoServicio = new SujetoServicioImpl();
		List<TipoClienteVO> listaTipoCliente = sujetoServicio.getAllTipoClienteVO();
		
		RepartoServicio repartoServicio = new RepartoServicioImp();
		List<RepartoVO> listaReparto = repartoServicio.getRepartos();
		
		ProductoServicio productoServicio = new ProductoServicioImp();
		List<ProductoVO> listaProducto = productoServicio.getProductos();
		
		List<PackVO> listaPack = productoServicio.getPacks();
		List<FrioCalorVO> listaFrioCalor = productoServicio.getEquiposFrioCalorByTipoAndEstado(ConstantModel.FRIO_CALOR_NO_AGUA_DE_RED,ConstantModel.ESTADO_FRIO_CALOR.FABRICA.getEstado());
		
//		System.out.println("Cantidad de tipo de Cliente "+listaTipoCliente.size());
//		System.out.println("Cantidad de Reparto "+listaReparto.size());
//		System.out.println("Cantidad de Producto "+listaProducto.size());
//		System.out.println("Cantidad de Pack "+listaPack.size());
//		System.out.println("Cantidad de FrioCalor "+listaFrioCalor.size());
		
		if ((listaTipoCliente.size() == 0) || (listaReparto.size() == 0) || (listaProducto.size() == 0) || (listaPack.size() == 0) || (listaFrioCalor.size() == 0)
				|| (listaReparto == null)) {
			System.out.println("NO SE TENDRIA QUE PODER ENTRAR AL ALTA");
		
			if (listaTipoCliente.size() == 0){
			FacesContext.getCurrentInstance().addMessage("form1::growl1", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"No Puede Ingresar Al Alta de Sujetos Residenciales, debera insertar registros las tabla Tipo de Clientes", ""));
			}
			
			if (listaReparto.size() == 0){
				FacesContext.getCurrentInstance().addMessage("form1::growl1", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"No Puede Ingresar Al Alta de Sujetos Residenciales, debera insertar registros las tabla Reparto", ""));
			}
			
			if (listaProducto.size() == 0){
				FacesContext.getCurrentInstance().addMessage("form1::growl1", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"No Puede Ingresar Al Alta de Sujetos Residenciales, debera insertar registros las tabla Producto", ""));
			}
			
			if (listaPack.size() == 0){
				FacesContext.getCurrentInstance().addMessage("form1::growl1", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"No Puede Ingresar Al Alta de Sujetos Residenciales, debera insertar registros las tabla Pack", ""));
			}
			
			if (listaFrioCalor.size() == 0){
				FacesContext.getCurrentInstance().addMessage("form1::growl1", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"No Puede Ingresar Al Alta de Sujetos Residenciales, debera insertar registros las tabla Frio-Calor", ""));
			}
			
			return false;
		}else{
			System.out.println("SE TENDRIA QUE PODER ENTRAR AL ALTA");
			return true;
		}
	}

	public String bajaListener(SucursalVO sVO){
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		sessionParams.put("sucursal", sVO);

		return Constante.URL_RESIDENCIAL_DELETE;
	}

	public String prepareEdit(SucursalVO sucursal) {
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		sessionParams.put("sucursal", sucursal);
		return Constante.URL_RESIDENCIAL_EDIT;	
	}
	//---------------GETTERS AND SETTERS-----------------------------
	public List<SucursalVO> getListaSucursales() {
		return listaSucursales;
	}

	public void setListaSucursales(List<SucursalVO> listaSucursales) {
		this.listaSucursales = listaSucursales;
	}

	public SucursalVO getSucursal() {
		return sucursal;
	}

	public void setSucursal(SucursalVO sucursal) {
		this.sucursal = sucursal;
	}
	
}
